using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using Nextel.Utils;

public partial class MonitoreoBusqueda : PageController
{
    public List<MonitoreoBean> loDT = new List<MonitoreoBean>();
    ParametroMonitoreo parametroMonitoreo;
    public String[] cabecera;
    public String[] detalle;
    public String[] ancho;
    public PaginacionBean pagina = new PaginacionBean();
    public String camposBusqueda = "";
    public String eliminarEditar;
    public String tamaniototal = "0";
    public String color="";
 
   
  

    protected override void initialize( )
    {
        
        if (Request.Form["numeroPagina"] != null)
        {
            

            irPagina();
        }
        else
        {
            parametroMonitoreo = DBMonitoreo.obtenerParametroMonitoreo();
            realizarBusqueda( );
        }
    }
  
   

    #region busqueda monitoreo
    public void iniciarMonitoreo()
    {
        MonitoreoBean bean = getMonitoreoBean();

        bool flagEnAlgunPoligono = false;
        bool flagEnElPoligonoCorrecto = false;
        
        if (StringUtils.validarFechaCompleta(bean.fecha))
        {
            loDT = DBMonitoreo.findMonitoreoWebBean(bean, ((UsuarioBean)Session[SessionManager.USER_SESSION]).codigo);

            List<GeocercaBean> lstGeocerca = DBMonitoreo.findGeocercaBean();

            foreach (MonitoreoBean beantemp in loDT)
            {
                try
                {
                    beantemp.color  = getparametros(beantemp.programado,beantemp.realizado);

                    if (beantemp.latitud != "" && beantemp.longitud != "" &&
                        double.Parse(beantemp.latitud) != 0 && double.Parse(beantemp.longitud) != 0)
                    {
                        foreach (GeocercaBean geocerca in lstGeocerca)
                        {

                            GPolygon polygon = new GPolygon();
                            polygon.parseString(geocerca.puntos);
                            if (polygon.pointInPolygon(beantemp.latitud, beantemp.longitud))
                            {
                                beantemp.nombreGeocerca = geocerca.descripcion;
                                //beantemp.fueraRuta = (beantemp.idGeocerca != geocerca.id) ? IdiomaCultura.getMensaje(IdiomaCultura.WEB_FUERA_RUTA) : "";

                                flagEnAlgunPoligono = true;

                                // si esta en ruta
                                if (beantemp.idGeocerca == geocerca.id)
                                {
                                    flagEnElPoligonoCorrecto = true;
                                    break;
                                }


                            }
                        }

                        // si no estubo en ningun poligono o no estubo en el poligono correcto
                        if (!flagEnAlgunPoligono || !flagEnElPoligonoCorrecto)
                        {
                            beantemp.fueraRuta = IdiomaCultura.getMensaje(IdiomaCultura.WEB_FUERA_RUTA);
                        }


                    }
                    else
                    {
                        if (beantemp.idGeocerca != "")
                        {
                            beantemp.fueraRuta = IdiomaCultura.getMensaje(IdiomaCultura.WEB_FUERA_RUTA);
                        }
                    }
                }
                catch (Exception e) { }
            }
        }
        else
        {
            loDT = new List<MonitoreoBean>();
        }
    }

    private String getparametros(int program, int realizado)
    {

        Double limiteInferiorValor = Double.Parse(parametroMonitoreo.limiteInferiorValor) / 100;
        Double limiteMedioValor = Double.Parse(parametroMonitoreo.limiteMedioValor) / 100;
        Double limiteSuperiorValor = Double.Parse(parametroMonitoreo.limiteSuperiorValor) / 100;

        String limiteInferiorColor = parametroMonitoreo.limiteInferiorColor;
        String limiteMedioColor = parametroMonitoreo.limiteMedioColor;
        String limiteSuperiorColor = parametroMonitoreo.limiteSuperiorColor;

      
        Double LimiteVerde1 = limiteSuperiorValor * program;
        Double LimiteVerde2 = limiteMedioValor * program;
        Double LimiteAmarillo1 = limiteMedioValor * program;
        Double LimiteAmarillo2 = limiteInferiorValor * program;
        Double LimiteRojo = limiteInferiorValor * program;

        if (program > 0)
        {
                if (realizado <= LimiteVerde1 && realizado >= LimiteVerde2)
                {
                    //LIMITE SUPERIOR
                    //Green;                    
                    color = limiteSuperiorColor;                                        
                    return color;

                }
                if (realizado < LimiteAmarillo1 && realizado >= LimiteAmarillo2)
                {
                    //LIMITE MEDIO
                    //Yellow;
                    color = limiteMedioColor;                    
                    return color;

                }
                if (realizado < LimiteRojo)
                {
                    //LIMITE INFERIORCOLOR
                    //Red;
                    color = limiteInferiorColor;
                    return color;
                }

                color ="";
                return color;
                

        }
        color = "";
        return color;
       
    }





    private MonitoreoBean getMonitoreoBean()
    {
        MonitoreoBean bean = new MonitoreoBean();

        bean.codigo = Request.Form["txtcodigousuario"];

        bean.fecha = Request.Form["txtfecha"];

        camposBusqueda = "txtcodigousuario=" + bean.codigo;

        camposBusqueda += "&txtfecha=" + bean.fecha;

        asignarPaginacionBean(bean);

        return bean;
    }

    #endregion

    public void realizarBusqueda()
    {
 
        iniciarMonitoreo();

        if (loDT != null && loDT.Count > 0)
        {
            pagina.setTotalRegistros(loDT[0].tamaniototal);
            pagina.calcularNumeroMostrar();
        }
    }

    #region irpagina
        public void irPagina()
    {
        String piPagina = Request.Form["numeroPagina"];
        String pAncla = Request.Form["ancla"];
        String pPaginaIzquierda = Request.Form["paginaIzquierda"];

        if (pagina != null && piPagina != null)
        {
            pagina.paginaAncla = pAncla;

            if (pPaginaIzquierda != null && !"".Equals(pPaginaIzquierda))
            {
                pagina.paginaIzquierda = int.Parse(pPaginaIzquierda);
            }

            pagina.irPagina(int.Parse(piPagina));

            realizarBusqueda();
        }
    }

    private void asignarPaginacionBean(AbstractBean bean)
    {
        pagina.buscarOrden = Request.Form["hidBuscarOrden"] != null ? int.Parse(Request.Form["hidBuscarOrden"]) : 0;
        pagina.buscarNombre = Request.Form["hidBuscarCampo"];
        camposBusqueda = camposBusqueda + "&hidModulo=" + Request.Form["hidModulo"];

        bean.registroporpagina = pagina.regitrosPorPagina;
        bean.paginaactual = pagina.paginaActual;
        bean.buscarorden = pagina.buscarOrden;
        bean.buscarname = pagina.buscarNombre;

        eliminarEditar = bean.flag;
    }

    #endregion
}
